package day12.handler;

import day12.packet.response.HeartBeatResponsePacket;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.timeout.IdleState;
import io.netty.handler.timeout.IdleStateEvent;
import io.netty.handler.timeout.IdleStateHandler;

import java.util.concurrent.TimeUnit;

/**
 * @author chenshijie
 * @date 2024/1/6 14:05
 */

public class IMIdleStateHandler extends IdleStateHandler {

    private static final int READER_IDLE_TIME = 15;

    public IMIdleStateHandler() {
        // 第一个参数是读空闲时间
        // 第二个参数是写空闲时间
        // 第三个参数是读写空闲时间
        // 第四个参数是单位
        // 这意味着，15s内如果没有读到数据就表示连接假死，回调channelIdle()方法
        super(READER_IDLE_TIME, 0, 0, TimeUnit.SECONDS);
    }


    @Override
    protected void channelIdle(ChannelHandlerContext ctx, IdleStateEvent evt) throws Exception {
//        System.out.println("aaaa");
        System.out.println("超时没有任何响应");
//        if (evt.state() == IdleState.READER_IDLE) {
//            System.out.println("再不发消息过来我就关机了");
//            ctx.writeAndFlush(new HeartBeatResponsePacket());
//            Thread.sleep(10000);
//        }
        ctx.channel().close();
    }
}
